// @author: caoshi
// @date: 2021-04-28 21:37

// 类型:
//		每个通道(channnel) 都有相关联的数据类型
// 阻塞:
//     发送和写数据的过程都是阻塞的
//     发送数据 chan <- data, 将数据写入通道, 读取数据来解除阻塞
//     读取数据 data = <- chan, 从通道中读取数据, 写入数据来解除阻塞
// channel 本身是同步的, 意味着同一时间, 只有一条groutine来进行操作这个channel
// channel 是groutine之间的连接, 所以通道的发送和接收必须处在不同的groutine中
package main

import "fmt"

func main() {
	var ch1 chan bool
	ch1 = make(chan bool)

	go func() {
		for i := 0; i < 10; i++ {
			fmt.Println("子groutine中, ", i)
		}
		// 循环结束后向通道中写入数据, 表示子groutine要执行结束了
		ch1 <- true
		fmt.Println("子groutine结束")
	}()

	// 从通道中读取数据, 是阻塞的
	data := <-ch1
	fmt.Println("main ===> data ", data)
	fmt.Println("主groutine结束")

}
